package Controller.Facade;
/*
 * Facade.java
 *
 * Created on 10/03/2009, 15:31:38
 * Copyright Elizabete
 */

import Model.BD.DAO;
import java.lang.reflect.Method;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

public class FacadeIMPL implements FacadeInterface {

   private Class classeBO;

   public FacadeIMPL(Class classeBO) {
      this.classeBO = classeBO;
   }

   public void salvar(Object obj) throws Exception {
      try {
         Object obj1 = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");

         try {
            DAO dao = (DAO) mtdDAO.invoke(obj1);
            dao.salvar(obj);

         } catch (Exception e) {
            throw new Exception(e.getMessage(), e);
         }

      } catch (Exception e) {
         throw new Exception(e.getMessage(), e);
      }
   }
   //PROCURA E EXCLUI O OBJETO POR NOME E TIPO

   public void excluir(Object obj) throws Exception {
      try {
         Object obj1 = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         DAO dao = (DAO) mtdDAO.invoke(obj1);
         dao.Excluir(obj);

      } catch (Exception e) {
         throw new Exception(e.getMessage());

      }
   }

   public List consultar() throws Exception {
      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         DAO dao = (DAO) mtdDAO.invoke(obj);
         return dao.consultar();

      } catch (Exception e) {
         throw new Exception(e.getMessage());
      }
   }

   public Object retornaObjeto(String nome, Object object) throws Exception {
      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         DAO dao = (DAO) mtdDAO.invoke(obj);
         List lista = dao.consultarUmItem(nome, object);
         return lista.get(0);

      } catch (Exception e) {
         throw new Exception(e.getMessage());
      }
   }
      public Object retornaObjetoConsultaDoisItens(String nome,String nome2, Object object,Object object2) throws Exception {
      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         DAO dao = (DAO) mtdDAO.invoke(obj);
         List lista = dao.consultarDoisItens(nome, nome2, object, object2);
         return lista.get(0);

      } catch (Exception e) {
         throw new Exception(e.getMessage());
      }
   }

   public Object retornaData(String nome, Object object) throws Exception {
      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         DAO dao = (DAO) mtdDAO.invoke(obj);
         List lista = dao.consultarData(nome, object);
         return lista.get(0);

      } catch (Exception e) {
         throw new Exception(e.getMessage());
      }
   }
   
   public Object retornaObjetoCodigo(String nome, Integer object) throws Exception {
      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         DAO dao = (DAO) mtdDAO.invoke(obj);
         return dao.consultarObjetoCodigo(nome, object);

      } catch (Exception e) {
         throw new Exception(e.getMessage());
      }
   }

   public Object buscaObjetoFK(String relacionamento, String campo_consultar,
           int valor_consultar) throws Exception {

      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         DAO dao = (DAO) mtdDAO.invoke(obj);
         List lista = dao.consultaComFK(relacionamento, campo_consultar, valor_consultar);
         return lista.get(0);

      } catch (Exception e) {
         throw new Exception(e.getMessage());
      }
   }

   public List buscaListaFK(String relacionamento, String campo_consultar,
           int valor_consultar) throws Exception {

      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         DAO dao = (DAO) mtdDAO.invoke(obj);
         List lista = dao.consultaComFK(relacionamento, campo_consultar, valor_consultar);
         return lista;

      } catch (Exception e) {
         throw new Exception(e.getMessage());
      }
   }

   public List buscaObjetoComposto(String caminhoCampo, Object valorConsultar) throws Exception {

      try {
         Object obj = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");
         DAO dao = (DAO) mtdDAO.invoke(obj);
         return dao.consultaComPKComposta(caminhoCampo, valorConsultar);

      } catch (Exception e) {
         throw new Exception(e.getMessage());
      }
   }

   public Object buscaPorDoisParametros(String campo_consultar1, String campo_consultar2,
           Object valor_consultar1, Object valor_consultar2) throws Exception {
      try {
         Object obj1 = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");

         try {
            DAO dao = (DAO) mtdDAO.invoke(obj1);
            List lista = dao.consultarDoisItens(campo_consultar1, campo_consultar2, valor_consultar1, valor_consultar2);
            return lista.get(0);

         } catch (Exception e) {
            throw new Exception(e.getMessage(), e);
         }

      } catch (Exception e) {
         throw new Exception(e.getMessage(), e);
      }
   }

   public Object buscaPorDataComposta(String campo_consultar1, String campo_consultar2,
           Object valor_consultar1, Object valor_consultar2) throws Exception {
      try {
         Object obj1 = classeBO.newInstance();
         Method mtdDAO = classeBO.getMethod("getDAO");

         try {
            DAO dao = (DAO) mtdDAO.invoke(obj1);
            List lista = dao.consultarDoisItensData(campo_consultar1, campo_consultar2, valor_consultar1, valor_consultar2);
            return lista.get(0);

         } catch (Exception e) {
            throw new Exception(e.getMessage(), e);
         }

      } catch (Exception e) {
         throw new Exception(e.getMessage(), e);
      }
   }

   
}
